package com.example.ziliao.ui.average_growth

import android.graphics.Color
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Button
import android.widget.LinearLayout
import android.widget.TableLayout
import android.widget.TextView
import androidx.fragment.app.Fragment
import com.example.ziliao.R
import com.example.ziliao.databinding.FragmentAverageGrowthBinding
import com.example.ziliao.utils.NumberGenerator
import com.example.ziliao.utils.OptionGenerator
import com.example.ziliao.utils.OptionsHelper
import kotlin.random.Random

class AverageGrowthFragment : Fragment() {
    private var _binding: FragmentAverageGrowthBinding? = null
    private val binding get() = _binding!!

    private lateinit var btnStart: Button
    private lateinit var tvQuestion: TextView
    private lateinit var tableLayout: TableLayout
    private lateinit var optionsContainer: LinearLayout
    private lateinit var btnOptionA: Button
    private lateinit var btnOptionB: Button
    private lateinit var btnOptionC: Button
    private lateinit var btnOptionD: Button
    private lateinit var tvExactResult: TextView

    private val importViews = mutableListOf<TextView>()
    private val exportViews = mutableListOf<TextView>()
    private var correctAnswer: Double = 0.0
    private var questionType: Int = 0 // 0: 贸易顺差, 1: 进出口总量, 2: 进口量, 3: 出口量

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        _binding = FragmentAverageGrowthBinding.inflate(inflater, container, false)
        return binding.root
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        btnStart = binding.btnStart
        tvQuestion = binding.tvQuestion
        tableLayout = binding.tableLayout
        optionsContainer = binding.optionsContainer
        btnOptionA = binding.btnOptionA
        btnOptionB = binding.btnOptionB
        btnOptionC = binding.btnOptionC
        btnOptionD = binding.btnOptionD
        tvExactResult = binding.tvExactResult

        // 初始化进口量和出口量的TextView列表
        importViews.clear()
        exportViews.clear()
        for (i in 0..4) {
            importViews.add(binding.root.findViewById(resources.getIdentifier("import${i + 1}", "id", requireContext().packageName)))
            exportViews.add(binding.root.findViewById(resources.getIdentifier("export${i + 1}", "id", requireContext().packageName)))
        }

        btnStart.setOnClickListener {
            resetOptions()
            generateAndDisplayNumbers()
        }
    }

    private fun resetOptions() {
        // 隐藏所有组件
        tableLayout.visibility = View.GONE
        tvQuestion.visibility = View.GONE
        
        // 重置选项状态
        OptionsHelper.resetOptions(
            btnOptionA,
            btnOptionB,
            btnOptionC,
            btnOptionD,
            optionsContainer,
            tvExactResult
        )
    }

    private fun generateAndDisplayNumbers() {
        // 先显示表格布局
        tableLayout.visibility = View.VISIBLE

        // 生成进口量（递增）
        val imports = mutableListOf<Double>()
        var currentImport = NumberGenerator.generateRandomNumber()
        imports.add(currentImport)
        
        for (i in 1..4) {
            // 确保每个数比前一个大，但增长幅度适中
            currentImport = Random.nextDouble(currentImport * 1.05, currentImport * 1.15)
            imports.add(currentImport)
        }

        // 生成出口量（递增，且始终大于进口量）
        val exports = mutableListOf<Double>()
        // 确保第一个出口量大于第一个进口量
        var currentExport = Random.nextDouble(imports[0] * 1.1, imports[0] * 5)
        exports.add(currentExport)
        
        for (i in 1..4) {
            // 确保每个数比前一个大，且始终大于对应的进口量
            val minExport = maxOf(exports[i - 1] * 1.05, imports[i] * 1.1)
            val maxExport = minOf(exports[i - 1] * 1.15, imports[i] * 5)
            currentExport = Random.nextDouble(minExport, maxExport)
            exports.add(currentExport)
        }

        // 显示数据
        for (i in 0..4) {
            importViews[i].text = formatNumber(imports[i])
            exportViews[i].text = formatNumber(exports[i])
        }

        // 随机选择题型（第一类、第二类或第三类）
        val questionCategory = Random.nextInt(3) // 0: 第一类, 1: 第二类, 2: 第三类
        questionType = Random.nextInt(4) // 0: 贸易顺差, 1: 进出口总量, 2: 进口量, 3: 出口量
        
        // 共用的题干内容映射
        val questionContent = when (questionType) {
            0 -> "贸易顺差"
            1 -> "进出口总量"
            2 -> "进口量"
            3 -> "出口量"
            else -> ""
        }
        
        // 计算基础值
        val baseValue = when (questionType) {
            0 -> when (questionCategory) {
                0 -> (exports.subList(1, 5).sum() - imports.subList(1, 5).sum()) // 第一类：2017-2020年贸易顺差总和
                1 -> (exports[4] - imports[4]) - (exports[1] - imports[1]) // 第二类：2020年贸易顺差减2017年贸易顺差
                2 -> (exports[4] - imports[4]) - (exports[0] - imports[0]) // 第三类：2020年贸易顺差减2016年贸易顺差
                else -> 0.0
            }
            1 -> when (questionCategory) {
                0 -> exports.subList(1, 5).sum() + imports.subList(1, 5).sum() // 第一类：2017-2020年进出口总量总和
                1 -> exports[4] - exports[1] + imports[4] - imports[1] // 第二类：2020年进出口总量减2017年
                2 -> exports[4] - exports[0] + imports[4] - imports[0] // 第三类：2020年进出口总量减2016年
                else -> 0.0
            }
            2 -> when (questionCategory) {
                0 -> imports.subList(1, 5).sum() // 第一类：2017-2020年进口量总和
                1 -> imports[4] - imports[1] // 第二类：2020年进口量减2017年进口量
                2 -> imports[4] - imports[0] // 第三类：2020年进口量减2016年进口量
                else -> 0.0
            }
            3 -> when (questionCategory) {
                0 -> exports.subList(1, 5).sum() // 第一类：2017-2020年出口量总和
                1 -> exports[4] - exports[1] // 第二类：2020年出口量减2017年出口量
                2 -> exports[4] - exports[0] // 第三类：2020年出口量减2016年出口量
                else -> 0.0
            }
            else -> 0.0
        }
        
        // 根据题型选择除数
        correctAnswer = baseValue / if (questionCategory == 1) 3.0 else 4.0

        // 显示题干
        tvQuestion.text = when (questionCategory) {
            0 -> "2017-2020年，年均${questionContent}约为"
            1 -> "2017-2020年，${questionContent}年均增量约为"
            2 -> "2017-2020年，${questionContent}的增长量平均值约为"
            else -> ""
        }

        tvQuestion.visibility = View.VISIBLE

        // 生成选项
        generateOptions()
    }

    private fun generateOptions() {
        // 根据题型选择生成选项的方式
        val useRangeOptions = questionType == 1 || questionType == 0 // 进出口总量和贸易顺差使用范围选项
        
        // 使用OptionsHelper生成和显示选项
        OptionsHelper.generateAndDisplayOptions(
            correctAnswer = correctAnswer,
            useRangeOptions = useRangeOptions,
            btnOptionA = btnOptionA,
            btnOptionB = btnOptionB,
            btnOptionC = btnOptionC,
            btnOptionD = btnOptionD,
            optionsContainer = optionsContainer,
            tvExactResult = tvExactResult
        )
    }

    fun formatNumber(number: Double): String {
        return when {
            number < 1000 -> {
                // 小于1000的数随机显示一位或两位小数
                when (Random.nextInt(2)) {
                    0 -> String.format("%.1f", number) // 一位小数
                    else -> String.format("%.2f", number) // 两位小数
                }
            }
            else -> String.format("%.0f", number) // 大于等于1000的数显示为整数
        }
    }
} 